242. .Net core 8 使用apt install 權限不足
WHY
今天早上又被人抓住說要開新服務,
看這個架構要怎麼調。
測試時來到Docker build,然後就掛了。
SOLUTION
在使用apt update的時候,出現了Permission denied
在Dockerfile的上層加上
USER root
就能執行了,
但不知道為什麼,我沒辦法復現錯誤狀況,
使用 docker system prune -a
全部清除了也是一樣。
但當時確實有碰到這個問題。
附上完整Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER root
WORKDIR /app
RUN apt update && apt install -y curl python3
RUN curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-443.0.0-linux-x86_64.tar.gz \
&& tar -xf google-cloud-cli-443.0.0-linux-x86_64.tar.gz && ./google-cloud-sdk/install.sh --command-completion=true --path-update=true --quiet
COPY gcs-download.json .
RUN /app/google-cloud-sdk/bin/gcloud auth activate-service-account abc@abc.com --key-file=gcs-download.json
EXPOSE 8080
EXPOSE 8081
其實應該用workload Identity會比較好,但這程式預計要放的位置,
要改的話變動太大。
ref. # New non-root 'app' user in Linux images
2024/12/06更新
還有另一個方法,
在deploy上面加上下面指令,
讓pod以root的身分執行。
containers:
....
securityContext:
allowPrivilegeEscalation: true
securityContext:
runAsUser: 0
ref. 為 Pod 或容器組態安全上下文